package com.lyy.java_chatroom.component;

import org.springframework.stereotype.Component;
import org.springframework.web.socket.WebSocketSession;

import java.util.concurrent.ConcurrentHashMap;

/*
 * 用于记录userId-WebSocketSession之间的映射
 * 管理所有在线用户
 */
@Component
public class OnlineUserManager {
    private ConcurrentHashMap<Integer, WebSocketSession> sessions=new ConcurrentHashMap<>();

    //将用户标记为在线
    public void online(int userId,WebSocketSession session){
        if (sessions.get(userId)!=null){
            //用户已在线，不可多开重复在线
            return;
        }
        sessions.put(userId,session);
        System.out.println("["+userId+"] 上线！");
    }

    //将用户标记为下线
    public void offline(int userId,WebSocketSession session){
        WebSocketSession existSession=sessions.get(userId);
        if (existSession!=session){
            //当前调用离线时的会话不是之前存储的会话，不产生实际效果
            return;
        }
        sessions.remove(userId);
        System.out.println("["+userId+"] 下线！");
    }

    //根据 userId获取会话 WebSocketSession
    public WebSocketSession getSession(int userId){
        return sessions.get(userId);
    }
}
